#ifndef INFINITY_SERVICE_CAMERA_CONTROLLER_H
#	define INFINITY_SERVICE_CAMERA_CONTROLLER_H

#include "cameracontroller.h"
#include "graphics/node.h"
#include "graphics/camera.h"

#include "entity3D.h"

namespace infinity {

	namespace physics {

		class Object;

	} // namespace physics

class CameraController
{

public : //! @name Construction & Destruction
	//! @{
	CameraController();
	virtual ~CameraController();
	//! @}

public : //! @name methodes
	//! @{
	inline dw::graphics::Camera* getCamera(){return &m_camera;}
	inline dw::graphics::Node* getMatrix(){return &m_cameraNode;}

	virtual void update(dw::float32 deltaT) = 0;
	virtual void onRegistered() = 0;
	virtual void onUnRegistered() = 0;

	virtual void bindPhysicsObject(physics::Object* physicsObject){;};
	virtual	void bindEntity(Entity3D* entity){;};

	//! @}

protected : //! @name Service callbacks
	//! @{
	dw::graphics::Node m_cameraNode;
	dw::graphics::Camera m_camera;

	physics::Object* m_physicsObject;
	Entity3D* m_entity;

	//! @}

private : //! @name Data
	//! @{

	//! @}
};

}// namespace infinity


#endif // !INFINITY_SERVICE_CAMERA_CONTROLLER_H
